home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE07 / CONSTRUC / DBWAVBTN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-01-13  |  2.2 KB  |  101 lines

  1. unit Dbwavbtn;
  2. interface
  3. uses
  4.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  5.   Forms, Dialogs, Buttons, DB, DBTables;
  6.  
  7. Type
  8.   TDBWavButton = class(TBitBtn)
  9.   private
  10.     { Private declarations }
  11.     FDataLink: TFieldDataLink;
  12.     MemoryStream: TMemoryStream;
  13.     procedure DataChange(Sender: TObject);
  14.  
  15.   protected
  16.     { Protected declarations }
  17.     function GetDataSource: TDataSource;
  18.     procedure SetDataSource(Value: TDataSource);
  19.  
  20.     function GetDataField: string;
  21.     procedure SetDataField(const Value: string);
  22.  
  23.   public
  24.     { Public declarations }
  25.     constructor Create(AOwner: TComponent); override;
  26.     destructor Destroy; override;
  27.     procedure Click; override;
  28.  
  29.   published
  30.     { Published declarations }
  31.     property DataSource: TDataSource read GetDataSource write SetDataSource;
  32.     property DataField: String read GetDataField write SetDataField;
  33.   end;
  34.  
  35. procedure Register;
  36.  
  37. implementation
  38. uses MMSystem;
  39.  
  40. constructor TDBWavButton.Create(AOwner: TComponent);
  41. begin
  42.   inherited Create(AOwner);
  43.   FDataLink := TFieldDataLink.Create;
  44.   FDataLink.OnDataChange := DataChange;
  45.   MemoryStream := TMemoryStream.Create;
  46. end;
  47.  
  48. destructor TDBWavButton.Destroy;
  49. begin
  50.   sndPlaySound(nil, 0);
  51.   FDataLink.Free;
  52.   MemoryStream.Free;
  53.   inherited Destroy;
  54. end;
  55.  
  56. procedure TDBWavButton.DataChange(Sender: TObject);
  57. begin
  58.   Enabled := Assigned(FDataLink);
  59.   if Enabled then
  60.   begin
  61.     sndPlaySound(nil, 0);
  62.     MemoryStream.Clear;
  63.     if (FDataLink.Field IS TBlobField) then
  64.       with (FDataLink.Field AS TBlobField) do SaveToStream(MemoryStream)
  65.   end
  66. end;
  67.  
  68. procedure TDBWavButton.Click;
  69. begin
  70.   sndPlaySound(MemoryStream.Memory, SND_ASYNC OR SND_MEMORY);
  71.   inherited Click;
  72. end;
  73.  
  74. function TDBWavButton.GetDataSource: TDataSource;
  75. begin
  76.   Result := FDataLink.DataSource;
  77. end;
  78.  
  79. procedure TDBWavButton.SetDataSource(Value: TDataSource);
  80. begin
  81.   FDataLink.DataSource := Value;
  82. end;
  83.  
  84. function TDBWavButton.GetDataField: string;
  85. begin
  86.   Result := FDataLink.FieldName;
  87. end;
  88.  
  89. procedure TDBWavButton.SetDataField(const Value: string);
  90. begin
  91.   FDataLink.FieldName := Value;
  92. end;
  93.  
  94. procedure Register;
  95. begin
  96.   RegisterComponents('Dr.Bob', [TDBWavButton]);
  97. end;
  98.  
  99. end.
  100.  
  101.